AngularJs 学习笔记(六)
一、AngularJs内置jQLite对象
1.angularjs里面内置了jquery的部分功能,可被我们使用。
var box = document.querySelector('.box');
//把一个DOM对象转成内置的jQLite对象
box = angular.element(box);
box.css({
'width':'100px',
'height':'100px'
})
2.jQLite只有jQuery中的基本功能,如果想使用jQuery的所有功能,那么只需导入jquery文件
二、指令的作用域
1.每自定义一个指令,都有自己的作用域
自定义指令,默认情况下,父子之间使用一个作用域$scope
- 在自定义指令属性中 scope可用来修改作用域,值有两种类型:(true/false)
- 为true时,父作用域修改时会影响子作用域;子作用域修改时,不会影响父作用域;当子的修改过完后,就互不影响
- 为false时,跟默认情况下一样,使用的是同一作用域
注意:同名字控制器下的作用域是不一样的
2.scope不传入布尔值,而传入为对象时,它是隔离作用域(跟谁都没有关系)
- 在对象中可以允许外界传入一些参数进来。
- 如果有,就用自己的属性,没有的话,就是空,不去找任何人
3.在scope中传入对象时,可指定修饰符
scope:{
msg:'@' //@-->特点:1.传值时必须使用插值语法 <div msg='{{woo}}'></div>
2.属于单向传递(父会影响子 子不会影响父)
name:'=' //= -->特点:1.传值不需要使用插值语法,直接使用属性名称 <div name='属性名称'></div>
2.属于双向传递(父子之间互相影响)
show:'&' //& -->特点:1.要求外界传入一个方法 <div show='方法名称()'></div>
}
一个指令,本身可以通过模板传给我们的值,我们展示该值。但是可以通过修饰符通过外界来传递我们想要的值,而不会写死了数据,起到灵活性。
三、指令–link
app.directive('woo',function (){
return{
restrict:'A',
link: function ($scope,ele,attr) {
console.log(ele); //打印出来的是整个标签
console.log(attr); //打印出来的是标签的属性
}
}
})
link里面有三个参数:
- $scope: 当前指令的作用域
- ele: 当前指令所在的标签(它是jQLite对象)
- attr: 指令身上绑定的属性,可以获取到绑定的属性
app.directive('woo',function (){
return{
restrict:'A',
controller:function(){
alert(1);
}
link: function ($scope,ele,attr) {
alert(2);
}
}
})
以上先执行controller,是在一创建指令时就执行了 不管dom有没有加载完成。一般在控制器当中只做业务逻辑处理,不牵扯任何dom
后执行link,当所有的dom节点加载完成时才去调用。既可做业务逻辑,也可以处理dom,主要处理dom元素。
其实除了controller和link外,还有compile,它主要是在开始编译时来调用,里面没有$scope。当有compile时,link不会执行。